/*
 * $Id: in.h,v 1.6 1993/06/04 11:16:15 jraja Exp $
 *
 * HISTORY
 * $Log: in.h,v $
 * Revision 1.6  1993/06/04  11:16:15  jraja
 * Fixes for first public release.
 *
 * Revision 1.5  1993/04/13  22:07:58  jraja
 * Added inclusion of sys/param.h, which include htons() et al, since many
 * BSD programs think that they should be included from here.
 *
 * Revision 1.4  93/03/06  02:14:28  02:14:28  jraja (Jarno Tapio Rajahalme)
 * Made INADDR_ANY visible in AmiTCP even in KERNEL, since library functions
 * need it.
 * 
 * Revision 1.3  93/03/03  22:07:51  22:07:51  jraja (Jarno Tapio Rajahalme)
 *  Changed explicit prototypes back.
 * 
 * Revision 1.2  93/03/03  21:55:25  21:55:25  jraja (Jarno Tapio Rajahalme)
 * Added #ifndef to prevent multiple inclusion.
 * 
 * Revision 1.1  92/11/17  16:47:45  16:47:45  jraja (Jarno Tapio Rajahalme)
 * Initial revision
 * 
 *
 */

/*
 * Copyright (c) 1982, 1986, 1990 Regents of the University of California.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. All advertising materials mentioning features or use of this software
 *    must display the following acknowledgement:
 *      This product includes software developed by the University of
 *      California, Berkeley and its contributors.
 * 4. Neither the name of the University nor the names of its contributors
 *    may be used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 *
 *      @(#)in.h        7.11 (Berkeley) 4/20/91
 */

/*
 * Macros for network/external number representation conversion.
 */
#define ntohl(x)        (x)
#define ntohs(x)        (x)
#define htonl(x)        (x)
#define htons(x)        (x)

#define NTOHL(x)        (x)
#define NTOHS(x)        (x)
#define HTONL(x)        (x)
#define HTONS(x)        (x)

/*
 * Constants and structures defined by the internet system,
 * Per RFC 790, September 1981.
 */

/*
 * Protocols
 */
#define IPPROTO_IP              0               /* dummy for IP */
#define IPPROTO_ICMP            1               /* control message protocol */
#define IPPROTO_GGP             3               /* gateway^2 (deprecated) */
#define IPPROTO_TCP             6               /* tcp */
#define IPPROTO_EGP             8               /* exterior gateway protocol */
#define IPPROTO_PUP             12              /* pup */
#define IPPROTO_UDP             17              /* user datagram protocol */
#define IPPROTO_IDP             22              /* xns idp */
#define IPPROTO_TP              29              /* tp-4 w/ class negotiation */
#define IPPROTO_EON             80              /* ISO cnlp */

#define IPPROTO_RAW             255             /* raw IP packet */
#define IPPROTO_MAX             256


/*
 * Local port number conventions:
 * Ports < IPPORT_RESERVED are reserved for
 * privileged processes (e.g. root).
 * Ports > IPPORT_USERRESERVED are reserved
 * for servers, not necessarily privileged.
 */
#define IPPORT_RESERVED         1024
#define IPPORT_USERRESERVED     5000

/*
 * Internet address (a structure for historical reasons)
 */
OBJECT in_addr
    s_addr:ULONG


/*
 * Definitions of bits in internet address integers.
 * On subnets, the decomposition of addresses to host and net parts
 * is done according to subnet mask, not the masks here.
 */
#define IN_CLASSA(i)            (((i) & $80000000) = 0)
#define IN_CLASSA_NET           $ff000000
#define IN_CLASSA_NSHIFT        24
#define IN_CLASSA_HOST          $00ffffff
#define IN_CLASSA_MAX           128

#define IN_CLASSB(i)            (((i) & $c0000000) = $80000000)
#define IN_CLASSB_NET           $ffff0000
#define IN_CLASSB_NSHIFT        16
#define IN_CLASSB_HOST          $0000ffff
#define IN_CLASSB_MAX           65536

#define IN_CLASSC(i)            (((i) & $e0000000) = $c0000000)
#define IN_CLASSC_NET           $ffffff00
#define IN_CLASSC_NSHIFT        8
#define IN_CLASSC_HOST          $000000ff

#define IN_CLASSD(i)            (((i) & $f0000000) = $e0000000)
#define IN_MULTICAST(i)         IN_CLASSD(i)

#define IN_EXPERIMENTAL(i)      (((i) & $e0000000) = $e0000000)
#define IN_BADCLASS(i)          (((i) & $f0000000) = $f0000000)

#define INADDR_ANY              $00000000
#define INADDR_BROADCAST        $ffffffff      /* must be masked */
#define INADDR_NONE             $ffffffff              /* -1 return */


#define IN_LOOPBACKNET          127                     /* official! */

/*
 * Socket address, internet style.
 */
OBJECT sockaddr_in
    sin_len:UBYTE,
    sin_family:UBYTE,
    sin_port:UWORD,
    sin_addr:in_addr,
    sin_zero[8]:BYTE


/*
 * Structure used to describe IP options.
 * Used to store options internally, to pass them to a process,
 * or to restore options retrieved earlier.
 * The ip_dst is used for the first-hop gateway when using a source route
 * (this gets put into the header proper).
 */
OBJECT ip_opts
    ip_dst:in_addr,         /* first hop, 0 w/o src rt */
    ip_opts[40]:BYTE            /* actually variable in size */


/*
 * Options for use with [gs]etsockopt at the IP level.
 * First word of comment is data type; bool is stored in int.
 */
#define IP_OPTIONS      1       /* buf/ip_opts; set/get IP per-packet options */
#define IP_HDRINCL      2       /* int; header is included with data (raw) */
#define IP_TOS          3       /* int; IP type of service and precedence */
#define IP_TTL          4       /* int; IP time to live */
#define IP_RECVOPTS     5       /* bool; receive all IP options w/datagram */
#define IP_RECVRETOPTS  6       /* bool; receive IP options for response */
#define IP_RECVDSTADDR  7       /* bool; receive IP dst addr w/datagram */
#define IP_RETOPTS      8       /* ip_opts; set/get IP per-packet options */

/*
#ifdef KERNEL
struct in_addr in_makeaddr(u_long net,
                           u_long host);
u_long in_netof(struct in_addr in);
u_long in_lnaof(struct in_addr in);
#endif
*/


